/*
 * ControllerFactory.h - Grupo 5 - Prog. Avanzada 2011
 *
 *  Javier Dominguez - 4.901.161-6
 *  Marcelo Parada - 1.977.094-9
 *  Rodrigo Ruiz - 4.481.611-2
 *  Maximiliano Silvera - 4.106.938-6
 */

#ifndef CONTROLLERFACTORY_H_
#define CONTROLLERFACTORY_H_

#include "../logica/ICompartirPistaAlbum.h"
#include "../logica/CCompartirPistaAlbum.h"

#include "../logica/ICompartirTemaSingle.h"
#include "../logica/CCompartirTemaSingle.h"

#include "../logica/IConsultarInformacionTema.h"
#include "../logica/CConsultarInformacionTema.h"

#include "../logica/IEliminarTema.h"
#include "../logica/CEliminarTema.h"

#include "../logica/IEtiquetarElemento.h"
#include "../logica/CEtiquetarElemento.h"

#include "../logica/IRegistroUsuario.h"
#include "../logica/CRegistroUsuario.h"

#include "../logica/IReproducirTema.h"
#include "../logica/CReproducirTema.h"

#include "../logica/IGlobal.h"
#include "../logica/CGlobal.h"

class ControllerFactory
{
private:
	ControllerFactory();

	static ControllerFactory *instance;

	ICompartirPistaAlbum *compartirPistaAlbumController;

	ICompartirTemaSingle *compartirTemaSingleController;

	IConsultarInformacionTema *consultarInformacionTemaController;

	IEliminarTema *eliminarTemaController;

	IEtiquetarElemento *etiquetarElementoController;

	IRegistroUsuario *registroUsuarioController;

	IReproducirTema *reproducirTemaController;

	IGlobal *globalController;

public:
	static ControllerFactory *getInstance();

    virtual ICompartirPistaAlbum *getCompartirPistaAlbumController() const;

    virtual ICompartirTemaSingle *getCompartirTemaSingleController() const;

    virtual IConsultarInformacionTema *getConsultarInformacionTemaController() const;

    virtual IEliminarTema *getEliminarTemaController() const;

    virtual IEtiquetarElemento *getEtiquetarElementoController() const;

    virtual IRegistroUsuario *getRegistroUsuarioController() const;

    virtual IReproducirTema *getReproducirTemaController() const;

    virtual IGlobal *getGlobalController() const;

    virtual ~ControllerFactory();
};

#endif /* CONTROLLERFACTORY_H_ */
